
package EntidadesController;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.swing.JOptionPane;


public class Aula {


    private String localizacao_idlocalizacao = "";
    private String horario_idhorario = "";
    private String turma_periodo_periodo = "";
    private String turma_codturma = "";
    private String turma_disciplina_coddisciplina = "";
    private String aula_duracao = "";
    private List<String> list_codTurma = new ArrayList<String>();
    private List<String> list_codDisciplina = new ArrayList<String>();
    private SQLException erro = new SQLException();
    static Connection conexao = null;
    static Statement estado = null;
    static ResultSet rs;
    private String msgerro;
    private boolean render=false;


    /** Estabelece a comunicação com o banco de dados.

     * @author Equipe de desenvolvimento - 3G Notifier

     */
    public Aula() {
        conexao = new Conexao().Acesso();
    }


     /** Este método consiste na inserção de uma nova aula na tabela do banco de dados 'aula'

     * @author Equipe de desenvolvimento - 3G Notifier

     * @return String - Retorna valor 'success' ou 'failure'

     */
    public String inserir() throws SQLException {
        String result_inserir = "failure";

        try {
            estado = conexao.createStatement();

            estado.execute("INSERT INTO aula(localizacao_idlocalizacao, horario_idhorario, turma_periodo_periodo, turma_codturma, turma_disciplina_coddisciplina, aula_duracao) VALUES ('" + localizacao_idlocalizacao + "','" + horario_idhorario + "','" + turma_periodo_periodo + "','" + turma_codturma + "','" + turma_disciplina_coddisciplina + "','" + aula_duracao + "')");
            estado.close();
            result_inserir = "success";
            render = false;
        } catch (SQLException e) {
            this.erro = e;
            msgerro = erro.getLocalizedMessage();

            if (msgerro.contains("pk_matriculadisc")&&msgerro.contains("unicidade"))
            {msgerro = "Esse número de matrícula ja está cadastrado!";}

            if (msgerro.contains("turma_periodo_periodo,turma_codturma,turma_disciplina_coddisciplina")&&msgerro.contains("aula_turma_periodo_periodo_fkey"))
            {msgerro = "Essa turma não existe! Cadastre uma turma existente";}

           // estado.execute("ROLLBACK");
            estado.close();
            result_inserir = "failure";
            render = true;
        }
        return result_inserir;
    }

     /** Função GET: retorna mensagem de erro.
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return erro.getMessage() - String
      */

    public boolean isRender() {
        return render;
    }

    public void setRender(boolean render) {
        this.render = render;
    }


    public String getErro() {
        return erro.getMessage();
    }

    /** Função GET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return horario_idhorario - String
      */
    public String getHorario_idhorario() {
        return horario_idhorario;
    }

    /** Função GET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return localizacao_idlocalizacao - String
      */
    public String getLocalizacao_idlocalizacao() {
        return localizacao_idlocalizacao;
    }

    /** Função GET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return turma_codturma - String
      */
    public String getTurma_codturma() {
        return turma_codturma;
    }

    /** Função GET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return turma_disciplina_coddisciplina - String
      */
    public String getTurma_disciplina_coddisciplina() {
        return turma_disciplina_coddisciplina;
    }

    /** Função GET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return turma_periodo_periodo - String
      */
    public String getTurma_periodo_periodo() {
        return turma_periodo_periodo;
    }

    public List<String> getList_codTurma() {
        return list_codTurma;
    }

    public void setList_codTurma(List<String> list_codTurma) {
        this.list_codTurma = list_codTurma;
    }

    public List<String> getList_codDisciplina() {
        return list_codDisciplina;
    }

    public void setList_codDisciplina(List<String> list_codDisciplina) {
        this.list_codDisciplina = list_codDisciplina;
    }

    /** Função GET : monta uma lista do tipo String com o localizacao_idlocalizacao da tabela localizacao
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return items - List<String>
      */
    public List<String> getListaLocalizacao_idlocalizacao() throws SQLException {

        List<String> items = new ArrayList<String>();

        estado = conexao.createStatement();
        rs = estado.executeQuery("SELECT * FROM localizacao");
        while (rs.next() == true) {
            localizacao_idlocalizacao = rs.getString(1);
            items.add(localizacao_idlocalizacao);
        }
        return items;
    }


    /** Função SET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @param localizacao_idlocalizacao - String
      */
    public void setLocalizacao_idlocalizacao(String localizacao_idlocalizacao) {
        this.localizacao_idlocalizacao = localizacao_idlocalizacao;
    }
    public String getMsgerro() {
        return msgerro;
    }


    /** Função GET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return aula_duracao - String
      */

    public void setMsgerro(String msgerro) {
        this.msgerro = msgerro;
    }


    public String getAula_duracao() {
        return aula_duracao;
    }

    /** Função SET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @param aula_duracao - String
      */
    public void setAula_duracao(String aula_duracao) {
        this.aula_duracao = aula_duracao;
    }

    /** Função GET: monta uma lista do tipo String com o horario_idlocalizacao da tabela horario
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return items - List<String>
      */
    public List<String> getListaHorario_idhorario() throws SQLException {

        List<String> items = new ArrayList<String>();

        estado = conexao.createStatement();
        rs = estado.executeQuery("SELECT * FROM horario");
        while (rs.next() == true) {
            horario_idhorario = rs.getString(1);
            items.add(horario_idhorario);
        }
        return items;
    }


    /** Função SET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @param horario_idhorario - String
      */
    public void setHorario_idhorario(String horario_idhorario) {
        this.horario_idhorario = horario_idhorario;
    }

    /** Função GET: monta uma lista do tipo String com o turma_codturma da tabela turma
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return items - List<String>
      */
    public List<String> getListaTurma_codturma() throws SQLException {

        List<String> items = new ArrayList<String>();

        estado = conexao.createStatement();
        rs = estado.executeQuery("SELECT * FROM turma");
        while (rs.next() == true) {
            turma_codturma = rs.getString(2);
            items.add(turma_codturma);
        }
        return items;
    }


    /** Função SET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @param turma_codturma - String
      */
    public void setTurma_codturma(String turma_codturma) {
        this.turma_codturma = turma_codturma;
    }


    /** Função GET: monta uma lista do tipo String com o turma_disciplina_coddisciplina da tabela disciplina
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return items - List<String>
      */
    public List<String> getListaTurma_disciplina_coddisciplina() throws SQLException {

        List<String> items = new ArrayList<String>();

        estado = conexao.createStatement();
        rs = estado.executeQuery("SELECT * FROM disciplina");
        while (rs.next() == true) {
            turma_disciplina_coddisciplina = rs.getString(1);
            items.add(turma_disciplina_coddisciplina);
        }
        return items;
    }


    /** Função SET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @param turma_disciplina_coddisciplina - String
      */
    public void setTurma_disciplina_coddisciplina(String turma_disciplina_coddisciplina) {
        this.turma_disciplina_coddisciplina = turma_disciplina_coddisciplina;
    }

    /** Função GET: monta uma lista do tipo String com o turma_periodo_periodo da tabela periodo
      * @author Equipe de desenvolvimento - 3G Notifier
      * @return items List<String>
      */
    public List<String> getListaTurma_periodo_periodo() throws SQLException {

        List<String> items = new ArrayList<String>();

        estado = conexao.createStatement();
        rs = estado.executeQuery("SELECT * FROM periodo");
        while (rs.next() == true) {
            turma_periodo_periodo = rs.getString(1);
            items.add(turma_periodo_periodo);
        }
        return items;
    }


    /** Função SET
      * @author Equipe de desenvolvimento - 3G Notifier
      * @param turma_periodo_periodo - String
      */
    public void setTurma_periodo_periodo(String turma_periodo_periodo) {
        this.turma_periodo_periodo = turma_periodo_periodo;
    }

     public String geraCodTurma(ValueChangeEvent event) {
        try {
            if (event.getNewValue() != event.getOldValue()) {
                listaCodTurma(event.getNewValue().toString());
            }
            return "success";
        } catch (Exception e) {
            return "failure";
        }
    }

     public String geraCodDisciplina(ValueChangeEvent event) {
        try {
            if (event.getNewValue() != event.getOldValue()) {
                listaCodDisciplina(event.getNewValue().toString());
            }
            return "success";
        } catch (Exception e) {
            return "failure";
        }
    }
     
    public void listaCodTurma(String codDisciplina) throws SQLException
    {
        List<String> items = new ArrayList<String>();
        String temp;
        JOptionPane.showMessageDialog(null, "Código do objeto: "+this.turma_disciplina_coddisciplina);
        JOptionPane.showMessageDialog(null, this.turma_periodo_periodo);
        JOptionPane.showMessageDialog(null, "Código do evento: "+codDisciplina);
        estado = conexao.createStatement();
        rs = estado.executeQuery("SELECT codTurma FROM turma WHERE periodo_periodo = '"+this.turma_periodo_periodo+"' AND disciplina_coddisciplina = '"+codDisciplina+"';");
        int i = 0;
        while(rs.next())
        {
            temp = rs.getString(1);
            items.add(temp);
            i++;
        }
        JOptionPane.showMessageDialog(null, i);
        this.list_codTurma = items;
    }

    public void listaCodDisciplina(String periodo) throws SQLException
    {
        List<String> items = new ArrayList<String>();
        String temp;

        estado = conexao.createStatement();
        rs = estado.executeQuery("SELECT disciplina_coddisciplina FROM turma WHERE periodo_periodo = '"+periodo+"';");
        while(rs.next()){
            temp = rs.getString(1);
            items.add(temp);
        }
        this.list_codDisciplina = items;
    }


}
